function resolve(dir) {
  return path.join(__dirname, dir);
}
require('babel-polyfill');
const path = require('path');

const productionGzipExtensions = ['html', 'js', 'css'];

const CompressionWebpackPlugin = require('compression-webpack-plugin');

const TerserPlugin = require('terser-webpack-plugin');

// 配置publicPath
const ENVIRONMENTALSCIENCE = process.env.VUE_APP_ENV;
let publicPathData;
if (ENVIRONMENTALSCIENCE == 'dev') {
  publicPathData = '/';
} else if (ENVIRONMENTALSCIENCE == 'test') {
  publicPathData = 'https://test-qcy.oss-cn-beijing.aliyuncs.com/etcloudh5/';
} else {
  publicPathData = 'https://prod-qcy-bejing.oss-cn-beijing.aliyuncs.com/etcloudh5/';
}

module.exports = {
  // baseUrl  type:{string} default:'/'
  // 将部署应用程序的基本URL
  // 将部署应用程序的基本URL。
  // 默认情况下，Vue CLI假设您的应用程序将部署在域的根目录下。

  publicPath: '/',

  // outputDir: 在npm run build时 生成文件的目录 type:string, default:'dist'

  // outputDir: 'dist',

  // pages:{ type:Object,Default:undfind }

  //   lintOnSave：{ type:Boolean default:true } 问你是否使用eslint
  lintOnSave: ENVIRONMENTALSCIENCE !== 'prod',
  // productionSourceMap：{ type:Bollean,default:true } 生产源映射
  // 如果您不需要生产时的源映射，那么将此设置为false可以加速生产构建
  productionSourceMap: ENVIRONMENTALSCIENCE == 'dev',
  // devServer:{type:Object} 3个属性host,port,https
  // 它支持webPack-dev-server的所有选项
  devServer: {
    port: 8088, // 端口号
    host: '0.0.0.0',
    https: false, // https:{type:Boolean}
    // proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理
    // assetsSubDirectory: "static",
    // assetsSubpublicPath: "/",
    // proxyTable: {
    //   "/api": {
    //     target: "http://api.douban.com/v2",
    //     ws: true,
    //     changeOrigin: true,
    //     pathRwrite: {
    //       "^/api": ""
    //     }
    //   },
    //   "/foo": {
    //     target: "<other_url>"
    //   }
    // } // 配置多个代理
  },
  configureWebpack: (config) => {
    // 入口文件
    config.entry.app = ['babel-polyfill', './src/main.js'];
    // config.externals = {
    //   vue: "Vue",
    //   "vue-router": "VueRouter",
    // };
    // 删除console插件
    let plugins = [
      new CompressionWebpackPlugin({
        // 正在匹配需要压缩的文件后缀
        test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
        filename: '[path].gz[query]',
        algorithm: 'gzip',
        threshold: 10240, // 只有大小大于该值的资源会被处理 10240
        minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
        deleteOriginalAssets: false, // 删除原文件
        // 其余配置查看compression-webpack-plugin
      }),
    ];
    // 清除注释打印等
    let TerserPlugins = new TerserPlugin({
      terserOptions: {
        compress: {
          // warnings: false,
          drop_console: true,
          drop_debugger: true,
          pure_funcs: ['console.log'],
        },
        output: {
          // 去掉注释内容
          comments: true,
        },
      },
      sourceMap: false,
      parallel: true,
    });

    // 只有打包生产环境才需要将console删除
    if (ENVIRONMENTALSCIENCE == 'prod') {
      config.optimization = {
        splitChunks: {
          chunks: 'all',
          cacheGroups: {
            vue: {
              name: 'vue',
              test: /[\\/]node_modules[\\/]vue[\\/]/,
              priority: -10,
            },
            vuex: {
              name: 'vuex',
              test: /[\\/]node_modules[\\/]vuex[\\/]/,
              priority: -10,
            },
            'vue-router': {
              name: 'vue-router',
              test: /[\\/]node_modules[\\/]vue-router[\\/]/,
              priority: -10,
            },
            vant: {
              name: 'vant',
              test: /[\\/]node_modules[\\/]vant[\\/]/,
              priority: -10,
            },
            vendors: {
              name: 'vendors',
              test: /[\\/]node_modules[\\/]/,
              priority: -20,
            },
          },
        },
      };
      plugins.push(TerserPlugins);
    }
    if (ENVIRONMENTALSCIENCE != 'dev') {
      config.plugins = [...config.plugins, ...plugins];
    }
  },
  // 允许对内部的 webpack 配置进行更细粒度的修改。
  chainWebpack: (config) => {
    // 移除 preload 插件
    config.plugins.delete('preload');
    // 移除 prefetch 插件
    config.plugins.delete('prefetch');
    // 命名
    config.resolve.symlinks(true); // 修复热更新失效
    config.resolve.alias
      .set('@', resolve('src'))
      .set('@assets', resolve('src/assets'))
      .set('@views', resolve('src/views'))
      .set('@components', resolve('src/components'))
      .set('@utils', resolve('src/assets/utils'));
    // 打包文件带hash
    config.output.filename('[name].[hash].js').end();
  },
};
